import axios from "axios"
// 引入vant 组件轻提示
import { closeToast, showLoadingToast } from "vant"

import store from "../store"

// 判断是开发环境还是生产环境，development 开发环境，production 生产环境
// const baseURL = import.meta.env.MODE === 'development' ? '开发环境用到的baseURL' : '生产环境用到的baseURL'
// 创建axios实例
const serveice = axios.create({
    baseURL: 'http://162.14.108.31:3000', // 请求的基准地址
    timeout: 10000, // 请求超时时间
})

// 请求拦截
serveice.interceptors.request.use(config => {
    // 显示加载中
    showLoadingToast({
        message: '加载中...',
        // forbidClick: true,
        loadingType: 'spinner',
        duration: 0,
    })

    // 统一在请求头中添加 token 认证字段
    // const token = sessionStorage.getItem('token')

    // 如果token是保存在store中，则从store中获取token数据
    const token = store.getters['user/token']
    if(token){
        config.headers.Authorization = `Bearer ${token}`
    }
    return config
}, error => {
    console.log('请求拦截失败', error)
    // 关闭轻提示
    closeToast(true)
})

// 响应拦截
serveice.interceptors.response.use(response => {
    // 响应返回则关闭提示
    closeToast(true)
    // 根据http状态码进行判断
    if(response.status >= 200 && response.status < 300){
        // 请求成功后，获取后端返回的数据
        const responseData = response.data
        // 对响应数据统一处理，后端返回数据格式是： {code, message, data}
        const {code, message, data} = responseData
        if(code === 200){
            return data
        }
        // 当code返回的不是200时，返回一个reject状态的Promise对象
        return Promise.reject(new Error(message))
    }
}, error => {
    console.log('响应拦截失败', error)
    // 关闭轻提示
    closeToast(true)
})

export default serveice